﻿package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.media.Video;
	import flash.ui.Keyboard;
	/**
	 * ...
	 * @author Ivan Lucas
	 */
	public class Main extends MovieClip 
	{
		
	/*------------------------------variaveis-------------------------*/
		var Introducao			:MovieClip = new MovieClip();
		var Menu_Prin			:MovieClip = new MovieClip();
		var Menu_Controles		:MovieClip = new MovieClip();
		public var MC_tela		:MovieClip = new MovieClip();
		var MC_nave				:Nave;
		var MC_tiro				:Tiro;
		var MC_inimigo			:Inimigo;
		var MC_back				:Background;
		var videoIntro			:Clip;
		
		var IN_delayini			:int = 30;
		var limitarShield		:int = 1;
		var limitadorShields	:Boolean = true;
		
		var AR_tiro				:Array;
		var AR_inimigo			:Array;
		
		
		/*-----------------Boloeanas de movimentacao---------------*/
			var BO_dir							:Boolean;
			var BO_esq							:Boolean;
			var BO_baixo						:Boolean;
			var BO_cima							:Boolean;
			var BO_tiro							:Boolean;	
		/*---------------------------------------------------------*/
		
		public static var _instance				:Main = null;
		
		public function Main() 
		{
			
			
			_instance = this;
			criarIntro();
			
		}
		
		private function criarIntro():void 
		{
			addChild(Introducao)
			videoIntro = new Clip();
			videoIntro.x = stage.stageWidth / 2;
			videoIntro.y = stage.stageHeight / 2;
			Introducao.addChild(videoIntro)
			
			videoIntro.addEventListener(KeyboardEvent.KEY_DOWN, clickvideo);
			
		}
		
		private function clickvideo(e:KeyboardEvent):void
		{
			removeChild(Introducao);
			videoIntro.removeEventListener(KeyboardEvent.KEY_DOWN, clickvideo);
			criarMenu();
			
		}
		
		private function criarMenu():void 
		{
			
			
			
			
			inicarJogo();
			
		}
		
		private function inicarJogo():void 
		{
			addChild(MC_tela);
			
			MC_back = new Background();
			MC_back.x = stage.stageWidth
			MC_back.y = stage.stageHeight / 2
			MC_tela.addChild(MC_back)
			
			AR_tiro = new Array();
			AR_inimigo = new Array()
			
			MC_nave = new Nave();
			MC_nave.x = 20
			MC_nave.y = stage.stageHeight / 2;
			MC_tela.addChild(MC_nave);
			
			/*----------------------Listeners--------------------------*/
				stage.addEventListener(Event.ENTER_FRAME,update, false, 0, true)
				stage.addEventListener(KeyboardEvent.KEY_DOWN, pressionar, false, 0, true)
				stage.addEventListener(KeyboardEvent.KEY_UP, soltar, false, 0, true)
			/*---------------------------------------------------------*/
		}
		
		
		
		
		
		private function update(e:Event):void 
		{
			moverNave();//funcao para mover a nave por boleanas,true para movimento
			criarInimigo();
			colisao();
			removerInimigo()
			removerTiro()
			
			
			for each (MC_tiro in AR_tiro) 
			{
				MC_tiro.update();
			}
			
			for each (MC_inimigo in AR_inimigo) 
			{
				MC_inimigo.update();
			}
			
			MC_back.update();
			
		}
		
		
		
		private function removerInimigo():void 
		{
			for (var a:int = 0; a <AR_inimigo.length ; a++) 
			{
				if (AR_inimigo[a].x < 0)
				{
					if (MC_tela.contains(AR_inimigo[a]))
					{
						MC_tela.removeChild(AR_inimigo[a])
						AR_inimigo.splice(a,1);
					}
				}
			}
		}
		private function removerTiro():void 
		{
			 for (var y:int = 0; y <AR_tiro.length ; y++) 
			 {
				 if (AR_tiro[y].x > stage.stageWidth)
				 {
					MC_tela.removeChild(MC_tiro[y])
					AR_tiro.splice(y,1);
				 }
				 
			 }	
		}
		
		//Presionando as teclas
		private function pressionar(e:KeyboardEvent):void 
		{
			switch (e.keyCode)
			{
				case Keyboard.RIGHT:
					BO_dir = true;
					break;
					
					case Keyboard.LEFT:
					BO_esq = true;
					break;
					
					case Keyboard.DOWN:
					BO_baixo = true;
					break;
					
					case Keyboard.UP:
					BO_cima = true;
					break;
															
					case Keyboard.SPACE:
					BO_tiro = true
					break;
			}
		}
		
		//soltando tecla
		private function soltar (e:KeyboardEvent):void
		{
			switch (e.keyCode)
			{
				case Keyboard.RIGHT:
					BO_dir = false;
					break;
					
					case Keyboard.LEFT:
					BO_esq = false;
					break;
					
					case Keyboard.DOWN:
					BO_baixo = false;
					break;
					
					case Keyboard.UP:
					BO_cima = false;
					break;
					
					case Keyboard.SPACE:
					BO_tiro = false;
					break;
					
			}
		}
	
		function moverNave():void
		{
			if (BO_cima == true)
			{
				MC_nave.y -= MC_nave.IN_velocidade;
				if (MC_nave.currentFrame == 15)
				{
					MC_nave.stop();
				}
				else if (MC_nave.currentFrame >= 9 && MC_nave.currentFrame < 15)
				{
					
				}
				else MC_nave.gotoAndPlay(9);
			}
			
			if (BO_baixo == true)
			{
				MC_nave.y += MC_nave.IN_velocidade;
				if (MC_nave.currentFrame == 1)
				{
					MC_nave.stop();
				}
				else if (MC_nave.currentFrame >= 2 && MC_nave.currentFrame < 8)
				{
					
				}
				else MC_nave.gotoAndPlay(2);				
			}
			
			if (BO_dir == true)
			{
				MC_nave.x += MC_nave.IN_velocidade;
			}
			
			if (BO_esq == true)
			{
				MC_nave.x -= MC_nave.IN_velocidade;
			}
			
			if (BO_tiro)
			{
				
					atirar();

			}
			
			if (BO_cima == false && BO_baixo ==  false)
			{
				MC_nave.gotoAndStop(1)
			}
		}
		
		private function atirar():void 
		{
			if (limitadorShields = true)
			{
				MC_tiro = new Tiro();
				MC_tiro.x = MC_nave.x;
				MC_tiro.y = MC_nave.y;
				MC_tela.addChild(MC_tiro)
				AR_tiro.push(MC_tiro)
				limitarShield--;
			}
			
			
			if (limitarShield <= 0)
			{
				limitadorShields = false
			}
		}
		
		private function criarInimigo():void 
		{
			IN_delayini--;
			if (IN_delayini <= 0)
			{
				MC_inimigo = new Inimigo();
				MC_inimigo.x = stage.stageWidth + MC_inimigo.x;
				MC_inimigo.y = Math.random() * 355;
				MC_tela.addChild(MC_inimigo)
				AR_inimigo.push(MC_inimigo)
				
				IN_delayini = 15;
			}
			
		}
		private function colisao():void 
		{
				for (var i:int = 0; i <AR_inimigo.length ; i++) 
				{
					for (var j:int = 0; j <AR_tiro.length ; j++) 
					{
						if (AR_inimigo[i] != null && AR_tiro[j] != null)
						{
							if (AR_inimigo[i].hitTestObject(AR_tiro[j])) 
							{
								if(MC_tela.contains(AR_inimigo[i])){
									MC_tela.removeChild(AR_inimigo[i])
									AR_inimigo.splice(i,1);
								}
								if(MC_tela.contains(AR_tiro[j]))
								{
									MC_tela.removeChild(AR_tiro[j])
									AR_tiro.splice(j,1);
								}
							}
						}
					}
				}
			}
		
		
	}
}